package Pojo;

import java.util.ArrayList;


/**Classe para objetos do tipo Item, onde serão contidos, valores e métodos 
* para o mesmo
 * 
 * @author Vitor
 */
public class Item implements Comparable<Item>{
	
	private String nome;
	private int codigo;
        private ArrayList<Fornecedor> fornecedores = new ArrayList<Fornecedor>();
	private float margemDeLucro;
	private float precoDeCusto;	
	private int quantidade;

    /**
     * Metodo construtor da classe Item
     */
    public Item(){
    }
   
    /**
     * Metodo que retorna o nome de um item especifico
     * @return String - nome do item
     */
    public String getNome() {
        return nome;
    }
    
    /**
     * Metodo que atribui um nome ao item
     * @param nome - nome do item
     */
    public void setNome(String nome) {
        this.nome = nome;
    }
    
    /**
     *Metodo que retorna o codigo de um item
     * @return int - codigo do item
     */
    public int getCodigo() {
        return codigo;
    }
    
    /**
     * Metodo que atribui um codigo a um item
     * @param codigo - Codigo de um item
     */
    public void setCodigo(int codigo) {
        this.codigo = codigo;
    }

    /**
     * Metodo que retorna a margem de lucro de um item
     * @return flaot - Margem de lucro do item
     */
    public float getMargemDeLucro() {
        return margemDeLucro;
    }
    
    /**
     * Metodo que atribui um valor para a margem de lucro de um item
     * @param margemDeLucro - margem de lucro de um item
     */
    public void setMargemDeLucro(float margemDeLucro) {
        this.margemDeLucro = margemDeLucro;
    }
    
    /**
     * Metodo que retorna o precoDeCusto de um item
     * @return float - preco de custo de um item
     */
    public float getPrecoDeCusto() {
        return precoDeCusto;
    }
    
    /**
     * Metodo que atribui um valor para a preco de custo de um item
     * @param precoDeCusto - preco de custo de um item
     */
    public void setPrecoDeCusto(float precoDeCusto) {
        this.precoDeCusto = precoDeCusto;
    }
    
    /**
     * Metodo que retorna a quantidade do item que existe no estoque
     * @return int - quantidade do item no estoque
     */
    public int getQuantidade() {
        return quantidade;
    }
    
    /**Metodo que atribui uma quantidade a um item, ou seja, quantos desse item existe
     * 
     * @param quantidade - quantidade do item que existe 
     */
    public void setQuantidade(int quantidade) {
        this.quantidade = quantidade;
    }
    
    /**Metodo que retorna uma lista dos fornecedores do item
     * @return ArrayList - lista com todos itens
     */
    public ArrayList<Fornecedor> getFonecedores() {
        return fornecedores;
    }
    /**
     * Metodo que verifica se o fornecedor já existe na lista
     * caso não exista adiciona um fornecedor na lista de fornecedores do item
     * @param fornecedor Fornecedor - Contem dados de um fornecedor para ser adicionado
     * a lista
     */
    public void AddFonecedores(Fornecedor fornecedor) {
        if(!this.fornecedores.contains(fornecedor)){
            this.fornecedores.add(fornecedor);
        }
    }
    
    /**
     * Metodo equals sobreescrito que compara o atributo de um objeto do tipo item
     * para descobrir se são iguais
     * @param obj - objeto generico
     * @return boolean - true caso seja iguais, false caso os objetos não sejam iguais
     */
    public boolean equals (Object obj) {
        
        if(!(obj instanceof Item)){
            return false;
        }
        Item item = (Item)obj;
        return (this.nome.equals(item.nome));
    }
    
    /**
     * Metodo que compara o atributo nome de um item e verifica se ele é mairo ou menor alfabeticamente
     * @param item - item para ser comparado
     * @return int -1 caso seja alfabeticamente menor, 0 se forem igauis, e 1 se for alfabeicamente maior
     */
    public int compareTo(Item item){
        if(this.nome.compareTo(item.nome)==0){
            return 0;
        }else if(this.nome.compareTo(item.nome)<0){
            return -1;
        }else
            return 1;           
    }
    
    public float CalcularPreco(){
        return (this.precoDeCusto*(1+this.margemDeLucro/100));
    }
}
	
